package com.wuuxiang.polestar.admin.web;

import com.wuuxiang.polestar.admin.dto.BaseReturnDTO;
import com.wuuxiang.polestar.admin.dto.UserDto;
import com.wuuxiang.polestar.admin.dto.UserLstRetDto;
import com.wuuxiang.polestar.admin.dto.UserReDTO;
import com.wuuxiang.polestar.admin.service.user.IUserService;
import com.wuuxiang.polestar.admin.utils.JwtUtils;
import com.wuuxiang.polestar.admin.utils.OvalUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 项目名称：polestar <br>
 * 类描述： <br>
 * 创建人：夏鸿鹏 <br>
 * 创建时间：2017-11-28 14:48 <br>
 * 修改备注： <br>
 */
@RestController
public class UserController {
	@Autowired
	private IUserService userService;

	@RequestMapping("/polestar/createUser")
	@ResponseBody
	public BaseReturnDTO createUser(@RequestBody UserDto userDto) {
		BaseReturnDTO baseReturnDTO = new BaseReturnDTO();
		if (OvalUtils.validate(baseReturnDTO, userDto)) {
			return baseReturnDTO;
		}
		String itemName = userDto.getUsername().trim();
		String value = userDto.getPassword().trim();
		if (userService.checkExists(itemName)) {
			baseReturnDTO.setReturnCode(-1);
			baseReturnDTO.setErrorCode("500");
			baseReturnDTO.setErrorText("用户名已经存在!");
		} else {
			userService.createUser(itemName, value);
		}
		return baseReturnDTO;
	}
	
	@RequestMapping("/polestar/updateUser")
	@ResponseBody
	public BaseReturnDTO updateUser(@RequestBody UserDto userDto) {
		BaseReturnDTO baseReturnDTO = new BaseReturnDTO();
		if (OvalUtils.validate(baseReturnDTO, userDto)) {
			return baseReturnDTO;
		}
		String itemName = userDto.getUsername().trim();
		String value = userDto.getPassword().trim();
		if (!userService.checkExists(itemName)) {
			baseReturnDTO.setReturnCode(-1);
			baseReturnDTO.setErrorCode("500");
			baseReturnDTO.setErrorText("用户不存在!");
		} else {
			userService.updateUser(itemName, value);
		}
		return baseReturnDTO;
	}

	@RequestMapping("/polestar/getUserList")
	@ResponseBody
	public UserLstRetDto getUserList() {
		UserLstRetDto userLstRetDto = new UserLstRetDto();
		List<UserDto> userDtoLst = userService.getUserLst();
		userLstRetDto.setUserDtoLst(userDtoLst);
		return userLstRetDto;

	}
	
	@RequestMapping("/polestar/deleteUser")
	@ResponseBody
	public BaseReturnDTO deleteuser(@RequestBody UserDto userDto) {
		BaseReturnDTO baseReturnDTO = new BaseReturnDTO();
		userDto.setPassword("tepPwd");
		if (OvalUtils.validate(baseReturnDTO, userDto)) {
			return baseReturnDTO;
		}
		String itemName = userDto.getUsername().trim();
		if(userDto.getIsAdmin() == 1){
			baseReturnDTO.setReturnCode(-1);
			baseReturnDTO.setErrorCode("500");
			baseReturnDTO.setErrorText("admin用户不允许删除!");
			return baseReturnDTO;
		}
		if (!userService.checkExists(itemName)) {
			baseReturnDTO.setReturnCode(-1);
			baseReturnDTO.setErrorCode("500");
			baseReturnDTO.setErrorText("用户不存在!");
		} else {
			userService.removeUser(itemName);
		}
		return baseReturnDTO;

	}

	@RequestMapping("/login.do")
	@ResponseBody
	public UserReDTO login(@RequestBody UserDto userDto) {

		UserReDTO baseReturnDTO = new UserReDTO();
		if (OvalUtils.validate(baseReturnDTO, userDto)) {
			return baseReturnDTO;
		}
		// 验证用户名密码
		UserDto dbUser = userService.getUser(userDto.getUsername());
		if (dbUser != null) {
			if (!dbUser.getPassword().equals(userDto.getPassword().trim())) {
				baseReturnDTO.setReturnCode(-1);
				baseReturnDTO.setErrorCode("500");
				baseReturnDTO.setErrorText("密码不正确");
				return baseReturnDTO;
			}
		} else {
			baseReturnDTO.setReturnCode(-1);
			baseReturnDTO.setErrorCode("500");
			baseReturnDTO.setErrorText("用户名不存在");
			return baseReturnDTO;
		}
		// 拼装accessToken
		String token = JwtUtils.createJWT(userDto.getUsername());
		// 返回accessToken
		baseReturnDTO.setToken(token);
		baseReturnDTO.setExpiresIn(JwtUtils.exp);
		baseReturnDTO.setTokenType("bearer");
		baseReturnDTO.setIsAdmin(dbUser.getIsAdmin());
		return baseReturnDTO;

	}

}
